<p>不能在浮点数<code> float </code>、<code> double </code> 上进行<code> == </code> <code> != </code> <code> > </code> <code> < </code> <code> >= </code> <code> <= </code>等比对操作。
  因为浮点数都是近似值不是精确值，所以这种比对结果几乎都是不正确的。
  如果非的进行比较，可以用<code> BigDecimal </code>，他可以正确的进行比对。</p>
<pre>
float f = 0.1; // 0.100000001490116119384765625
double d = 0.1; // 0.1000000000000000055511151231257827021181583404541015625
</pre>

<h2>不规范的代码示例</h2>
<pre> 
float myNumber = 3.146; 
if ( myNumber == 3.146f ) { //不合规。由于浮点不精确，这将是错误的
  // ... 
} 
if ( myNumber != 3.146f ) { //不合规。由于浮点不精确，这将是正确的
  // ... 
} 

if (myNumber &lt; 4 || myNumber &gt; 4) { // 不合规；间接不平等检验
}

float zeroFloat = 0.0f;
if (zeroFloat == 0) {  // 不规范。计算最终可能会得到一个接近但不等于零的值。
}
</pre>

<h2>例外</h2>
<p>由于<code> NaN </code>不等于自身，因此针对其自身测试浮点值的特定情况是对<code> NaN </code>的有效测试，因此将被忽略。</p>
<pre>
float f;
double d;
if(f != f) { // Compliant; test for NaN value
  System.out.println("f is NaN");
} else if (f != d) { // 不合规
  // ...
}
</pre>

<h2>更多</h2>
<ul>
<li> MISRA C：2004，13.3-不应测试浮点表达式是否相等或不相等。
</li><li> MISRA C ++：2008，6-2-2-浮点表达式不得直接或间接测试是否相等或不相等
</li></ul>

